From: Carlos Garnacho Date: Thu, 6 Sep 2018 19:50:21 +0000 (+0200) Subject: windowManager: listen actively to windows being destroyed during WS switch X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~929^2^2~47 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=b087752b5539a8cbb1d61979cb069aef8a3475be;p=gnome-shell.git windowManager: listen actively to windows being destroyed during WS switch Prevents gjs from dealing with already dispose()d objects. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/539 --- diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index b6627e253..2295e3010 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -1910,6 +1910,14 @@ var WindowManager = new Lang.Class({ actor.visible = visible; } } + + for (let i = 0; i < switchData.windows.length; i++) { + let w = switchData.windows[i]; + + w.windowDestroyId = w.window.connect('destroy', () => { + switchData.windows.splice(switchData.windows.indexOf(w), 1); + }); + } }, _finishWorkspaceSwitch(switchData) { @@ -1917,9 +1925,8 @@ var WindowManager = new Lang.Class({ for (let i = 0; i < switchData.windows.length; i++) { let w = switchData.windows[i]; - if (w.window.is_destroyed()) // Window gone - continue; + w.window.disconnect(w.windowDestroyId); w.window.reparent(w.parent); if (w.window.get_meta_window().get_workspace() !=